package org.meb.speedway;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

public class SortOrder {

	public enum Direction {
		ASC, DESC, ASC_TRUNC, DESC_TRUNC
	}

	@RequiredArgsConstructor
	@Getter
	public class SortOrderItem {

		@NonNull
		private String property;
		@NonNull
		private Direction direction;

	}

	// private LinkedHashMap<String, Direction> info = new LinkedHashMap<String,
	// Direction>();
	private List<SortOrderItem> info = new ArrayList<SortOrderItem>();

	// public Iterator<Entry<String, Direction>> iterator() {
	// return info.entrySet().iterator();
	// }
	//
	// public SortOrder clear() {
	// info.clear();
	// return this;
	// }
	//
	// public SortOrder asc(String property) {
	// // info.remove(property);
	// info.put(property, Direction.ASC);
	// return this;
	// }
	//
	// public SortOrder ascTrunc(String property) {
	// // info.remove(property);
	// info.put(property, Direction.ASC_TRUNC);
	// return this;
	// }
	//
	// public SortOrder desc(String property) {
	// // info.remove(property);
	// info.put(property, Direction.DESC);
	// return this;
	// }
	//
	// public SortOrder descTrunc(String property) {
	// // info.remove(property);
	// info.put(property, Direction.DESC_TRUNC);
	// return this;
	// }
	//
	// public SortOrder none(String property) {
	// info.remove(property);
	// return this;
	// }
	//
	// public boolean isEmpty() {
	// return info.isEmpty();
	// }

	public Iterator<SortOrderItem> iterator() {
		return info.iterator();
	}

	public SortOrder clear() {
		info.clear();
		return this;
	}

	public SortOrder asc(String property) {
		info.add(new SortOrderItem(property, Direction.ASC));
		return this;
	}

	public SortOrder ascTrunc(String property) {
		info.add(new SortOrderItem(property, Direction.ASC_TRUNC));
		return this;
	}

	public SortOrder desc(String property) {
		info.add(new SortOrderItem(property, Direction.DESC));
		return this;
	}

	public SortOrder descTrunc(String property) {
		info.add(new SortOrderItem(property, Direction.DESC_TRUNC));
		return this;
	}

	public SortOrder none(String property) {
		info.remove(property);
		return this;
	}

	public boolean isEmpty() {
		return info.isEmpty();
	}
}
